﻿using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Security;
using SGAEntidades;
using System.Text;
using SGALogicaNegocio;
using System.Collections.Generic;

namespace webSGA
{
    public partial class wfVehiculo : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                lblUsuario.Text = Context.User.Identity.Name;
                Util.Util.CargarTipoPropiedad(cboPropiedad, true);
                Util.Util.CargarMarcaVehiculo(cboMarca, true);
                Util.Util.CargarCarroceriaVehiculo(cboCarroceria, true);
                Util.Util.CargarTipoCombustible(cboTipoCombustible, true);
                hfAccion.Value = "N";

            }
        }

        protected void btnCerrarSesion_Click(object sender, EventArgs e)
        {
            FormsAuthentication.SignOut();
            Response.Redirect("Login.aspx");
        }

        protected void btnNuevo_Click(object sender, EventArgs e)
        {
            ActivarDesactivarCampos(true);
            LimpiarCampos();
            hfAccion.Value = "N";
        }

        protected void btnGrabar_Click(object sender, EventArgs e)
        {

            try
            {
                MostrarModalConfirmacion();
            }
            catch (Exception ex)
            {
                Util.Util.AlternarMensaje(false, "Ocurrió el siguiente error: " + ex.Message, alertaError, alertaExito,
                                                  lblError, lblExito);
            }
        }

        private void MostrarModalConfirmacion()
        {
            var sb = new StringBuilder();
            sb.Append(@"<script type='text/javascript'>");
            sb.Append("$('#modalConfirmacion').modal('show');");
            sb.Append(@"</script>");
            ClientScript.RegisterStartupScript(GetType(), "Show", sb.ToString());
            ScriptManager.RegisterClientScriptBlock(this, GetType(), "ModalScript", sb.ToString(), false);
        }

        protected void btnEditar_Click(object sender, EventArgs e)
        {
            ActivarDesactivarCampos(true);
            txtPlaca.Enabled = false;
            hfAccion.Value = "M";
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            if (hfAccion.Value.Equals("N"))
            {
                LimpiarCampos();
            }
            else
            {
                ActivarDesactivarCampos(false);
            }
        }

        private void GrabarVehiculo()
        {

            if (ValidarInformacion())
            {
                var oEntVehiculo = new VehiculoInfo();

                oEntVehiculo.Placa = txtPlaca.Text;
                oEntVehiculo.Motor = txtMotor.Text;
                oEntVehiculo.Chasis = txtChasis.Text;
                oEntVehiculo.IdMarcaVehiculo = cboMarca.SelectedValue;
                oEntVehiculo.IdModeloVehiculo = cboModelo.SelectedValue;
                oEntVehiculo.IdTipoCarroceria = cboCarroceria.SelectedValue;
                oEntVehiculo.IdTipoPropiedad = cboPropiedad.SelectedValue;
                oEntVehiculo.AñoFabricacion = Int32.Parse(txtAñoFabricacion.Text);
                oEntVehiculo.Color = txtColor.Text;
                oEntVehiculo.GalonesXKm = Double.Parse(txtKmGalon.Text);
                oEntVehiculo.UsuarioSistema = Context.User.Identity.Name;
                oEntVehiculo.IdTipoCombustible = cboTipoCombustible.SelectedValue;
                oEntVehiculo.TarjetaPropiedad = txtTarjetaPropiedad.Text;
                oEntVehiculo.Poliza = txtPoliza.Text;
                oEntVehiculo.FechaSoat = DateTime.Parse(txtFechaSoat.Text);
                oEntVehiculo.NroOcupantes = Int32.Parse(txtOcupantes.Text);

                if (hfAccion.Value.Equals("N"))
                {
                    if (new Vehiculo().Registrar(oEntVehiculo))
                    {
                        Util.Util.AlternarMensaje(true, "Se registró el vehículo con éxito.", alertaError, alertaExito,
                              lblError, lblExito);
                        ActivarDesactivarCampos(false);
                        CargarVehiculo(txtPlaca.Text);
                    }
                    else
                    {
                        Util.Util.AlternarMensaje(false, "No se registró el vehículo.", alertaError, alertaExito,
                              lblError, lblExito);
                    }
                }
                if (hfAccion.Value.Equals("M"))
                {
                    if (new Vehiculo().Actualizar(oEntVehiculo))
                    {
                        Util.Util.AlternarMensaje(true, "Se actualizó el vehículo con éxito.", alertaError, alertaExito,
                              lblError, lblExito);
                        ActivarDesactivarCampos(false);
                        CargarVehiculo(txtPlaca.Text);
                    }
                    else
                    {
                        Util.Util.AlternarMensaje(false, "No se actualizó el vehículo.", alertaError, alertaExito,
                              lblError, lblExito);
                    }
                }
            }

        }

        protected void btnBuscarPlaca_Click(object sender, EventArgs e)
        {
            //cboTipoLocalConsulta.SelectedValue = "-1";
            gvConsultaVehiculo.DataSource = null;

            var sb = new StringBuilder();
            sb.Append(@"<script type='text/javascript'>");
            sb.Append("$('#modalBusquedaVehiculo').modal('show');");
            sb.Append(@"</script>");
            ClientScript.RegisterStartupScript(GetType(), "Show", sb.ToString());
            ScriptManager.RegisterClientScriptBlock(this, GetType(), "ModalScript", sb.ToString(), false);
        }

        protected void cboMarca_SelectedIndexChanged(object sender, EventArgs e)
        {
            Util.Util.CargarModeloVehiculo(cboModelo, cboMarca, true);
        }

        private void ActivarDesactivarCampos(Boolean bEstado)
        {
            txtPlaca.Enabled = bEstado;
            txtFechaSoat.Enabled = bEstado;
            cboPropiedad.Enabled = bEstado;
            txtTarjetaPropiedad.Enabled = bEstado;
            btnBuscarTarjetaPropiedad.Enabled = bEstado;
            txtPoliza.Enabled = bEstado;
            btnBuscarPoliza.Enabled = bEstado;
            txtMotor.Enabled = bEstado;
            txtChasis.Enabled = bEstado;
            cboMarca.Enabled = bEstado;
            cboModelo.Enabled = bEstado;
            txtAñoFabricacion.Enabled = bEstado;
            txtColor.Enabled = bEstado;
            cboCarroceria.Enabled = bEstado;
            txtOcupantes.Enabled = bEstado;
            cboTipoCombustible.Enabled = bEstado;
            txtKmGalon.Enabled = bEstado;
        }

        private void LimpiarCampos()
        {
            txtPlaca.Text = "";
            txtFechaSoat.Text = "";
            cboPropiedad.SelectedValue = "-1";
            txtTarjetaPropiedad.Text = "";
            txtPoliza.Text = "";
            txtMotor.Text = "";
            txtChasis.Text = "";
            cboMarca.SelectedValue = "-1";
            cboModelo.Items.Clear();
            txtAñoFabricacion.Text = "";
            txtColor.Text = "";
            cboCarroceria.SelectedValue = "-1";
            txtOcupantes.Text = "";
            cboTipoCombustible.SelectedValue = "-1";
            txtKmGalon.Text = "";
        }

        protected void btnSiGrabar_Click(object sender, EventArgs e)
        {
            GrabarVehiculo();
        }

        private void CargarVehiculo(String sIdPlaca)
        {
            var oEntVehiculo = new VehiculoInfo(sIdPlaca);
            oEntVehiculo = new Vehiculo().Consultar(oEntVehiculo);

            if (oEntVehiculo.Placa != null)
            {
                txtPlaca.Text = oEntVehiculo.Placa;
                txtMotor.Text = oEntVehiculo.Motor;
                txtChasis.Text = oEntVehiculo.Chasis;
                cboMarca.SelectedValue = oEntVehiculo.IdMarcaVehiculo;
                Util.Util.CargarModeloVehiculo(cboModelo, cboMarca, true);
                cboModelo.SelectedValue = oEntVehiculo.IdModeloVehiculo;
                cboCarroceria.SelectedValue = oEntVehiculo.IdTipoCarroceria;
                cboPropiedad.SelectedValue = oEntVehiculo.IdTipoPropiedad;
                txtAñoFabricacion.Text = oEntVehiculo.AñoFabricacion.ToString();
                txtColor.Text = oEntVehiculo.Color;
                txtKmGalon.Text = String.Format("{0:0.00}", oEntVehiculo.GalonesXKm);
                cboTipoCombustible.SelectedValue = oEntVehiculo.IdTipoCombustible;
                txtTarjetaPropiedad.Text = oEntVehiculo.TarjetaPropiedad;
                txtPoliza.Text = oEntVehiculo.Poliza;
                if (oEntVehiculo.FechaSoat != null)
                    txtFechaSoat.Text = oEntVehiculo.FechaSoat.Value.ToShortDateString();
                txtOcupantes.Text = oEntVehiculo.NroOcupantes.ToString();

                ActivarDesactivarCampos(false);
            }
            else
            {
                Util.Util.AlternarMensaje(false, "No se encontró el vehículo indicado.", alertaError, alertaExito,
                          lblError, lblExito);
            }
        }

        private Boolean ValidarInformacion()
        {
            //DateTime? dFechaSOAT;
            //if (!String.IsNullOrEmpty(txtFechaSoat.Text))
            //    dFechaSOAT = Convert.ToDateTime(txtFechaSoat.Text);
            //else
            //    dFechaSOAT = null;

            if (String.IsNullOrEmpty(txtPlaca.Text))
            {
                Util.Util.AlternarMensaje(false, "Debe ingresar la placa del vehículo.", alertaError, alertaExito, lblError, lblExito);
                return false;
            }

            if (String.IsNullOrEmpty(txtFechaSoat.Text))
            {
                Util.Util.AlternarMensaje(false, "Debe ingresar la fecha del SOAT del vehículo.", alertaError, alertaExito, lblError, lblExito);
                return false;
            }

            if (!Util.Util.EsFechaValida(txtFechaSoat.Text))
            {
                Util.Util.AlternarMensaje(false, "La fecha del SOAT no tiene un formato válido. Debe ser dd/mm/yyyy.", alertaError, alertaExito, lblError, lblExito);
                return false;
            }

            if (cboPropiedad.SelectedValue.Equals("-1"))
            {
                Util.Util.AlternarMensaje(false, "Debe seleccionar el tipo de propiedad del vehículo.", alertaError, alertaExito, lblError, lblExito);
                return false;
            }

            if (String.IsNullOrEmpty(txtTarjetaPropiedad.Text))
            {
                Util.Util.AlternarMensaje(false, "Debe ingresar la tarjeta de propiedad del vehículo.", alertaError, alertaExito, lblError, lblExito);
                return false;
            }

            if (String.IsNullOrEmpty(txtPoliza.Text))
            {
                Util.Util.AlternarMensaje(false, "Debe ingresar la póliza del vehículo.", alertaError, alertaExito, lblError, lblExito);
                return false;
            }

            if (String.IsNullOrEmpty(txtMotor.Text))
            {
                Util.Util.AlternarMensaje(false, "Debe ingresar el código de motor del vehículo.", alertaError, alertaExito, lblError, lblExito);
                return false;
            }

            if (String.IsNullOrEmpty(txtChasis.Text))
            {
                Util.Util.AlternarMensaje(false, "Debe ingresar el código del chasis del vehículo.", alertaError, alertaExito, lblError, lblExito);
                return false;
            }

            if (cboMarca.SelectedValue.Equals("-1"))
            {
                Util.Util.AlternarMensaje(false, "Debe seleccionar la marca del vehículo.", alertaError, alertaExito, lblError, lblExito);
                return false;
            }

            if (cboModelo.SelectedValue.Equals("-1"))
            {
                Util.Util.AlternarMensaje(false, "Debe seleccionar el modelo del vehículo.", alertaError, alertaExito, lblError, lblExito);
                return false;
            }

            if (String.IsNullOrEmpty(txtAñoFabricacion.Text))
            {
                Util.Util.AlternarMensaje(false, "Debe ingresar el año de fabricación del vehículo.", alertaError, alertaExito, lblError, lblExito);
                return false;
            }

            if (!Util.Util.EsNumerico(txtAñoFabricacion.Text))
            {
                Util.Util.AlternarMensaje(false, "Debe ingresar un año de fabricación válido.", alertaError, alertaExito, lblError, lblExito);
                return false;
            }

            if (String.IsNullOrEmpty(txtColor.Text))
            {
                Util.Util.AlternarMensaje(false, "Debe ingresar el color del vehículo.", alertaError, alertaExito, lblError, lblExito);
                return false;
            }

            if (cboCarroceria.SelectedValue.Equals("-1"))
            {
                Util.Util.AlternarMensaje(false, "Debe seleccionar el tipo de carrocería del vehículo.", alertaError, alertaExito, lblError, lblExito);
                return false;
            }

            if (String.IsNullOrEmpty(txtOcupantes.Text))
            {
                Util.Util.AlternarMensaje(false, "Debe ingresar el número de ocupantes del vehículo.", alertaError, alertaExito, lblError, lblExito);
                return false;
            }

            if (!Util.Util.EsNumerico(txtOcupantes.Text))
            {
                Util.Util.AlternarMensaje(false, "Debe ingresar un número de ocupantes válido.", alertaError, alertaExito, lblError, lblExito);
                return false;
            }

            if (cboTipoCombustible.SelectedValue.Equals("-1"))
            {
                Util.Util.AlternarMensaje(false, "Debe seleccionar el tipo de combustible del vehículo.", alertaError, alertaExito, lblError, lblExito);
                return false;
            }

            if (String.IsNullOrEmpty(txtKmGalon.Text))
            {
                Util.Util.AlternarMensaje(false, "Debe ingresar el kilometraje por galón del vehículo.", alertaError, alertaExito, lblError, lblExito);
                return false;
            }

            if (!Util.Util.EsNumerico(txtKmGalon.Text))
            {
                Util.Util.AlternarMensaje(false, "Debe ingresar un kilometraje por galón válido.", alertaError, alertaExito, lblError, lblExito);
                return false;
            }

            //if (String.IsNullOrEmpty(txtCodigoPropietario.Text))
            //{
            //    Util.Util.AlternarMensaje(false, "Debe ingresar el código del propietario del vehículo.", alertaError, alertaExito, lblError, lblExito);
            //    return false;
            //}

            //if (String.IsNullOrEmpty(txtNombrePropietario.Text))
            //{
            //    Util.Util.AlternarMensaje(false, "Debe ingresar el nombre del propietario del vehículo.", alertaError, alertaExito, lblError, lblExito);
            //    return false;
            //}

            return true;
        }

        protected void gvConsultaVehiculo_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                int index = Convert.ToInt32(e.CommandArgument);
                var dataKey = gvConsultaVehiculo.DataKeys[index];
                String sPlaca = "";
                if (dataKey != null)
                {
                    sPlaca = dataKey.Value.ToString();
                }

                if (e.CommandName.Equals("Seleccionar"))
                {
                    CargarVehiculo(sPlaca);

                    var sb = new StringBuilder();
                    sb.Append(@"<script type='text/javascript'>");
                    sb.Append("$('#modalBusquedaVehiculo').modal('hide');");
                    sb.Append(@"</script>");
                    ClientScript.RegisterStartupScript(GetType(), "Hide", sb.ToString());
                    ScriptManager.RegisterClientScriptBlock(this, GetType(), "ModalScript", sb.ToString(), false);
                }
            }
            catch (Exception ex)
            {
                Util.Util.AlternarMensaje(false, "Ocurrió un error: " + ex.Message, alertaError, alertaExito, lblError, lblExito);
            }
        }

        protected void btnConsultar_Click(object sender, EventArgs e)
        {
            String sPlaca = String.IsNullOrEmpty(txtPlacaConsulta.Text.Trim()) ? null : txtPlacaConsulta.Text.Trim();
            String sTarjetaPropiedad = String.IsNullOrEmpty(txtTarjetaPropiedadConsulta.Text.Trim())
                                           ? null
                                           : txtTarjetaPropiedadConsulta.Text.Trim();
            String sPoliza = String.IsNullOrEmpty(txtPolizaConsulta.Text.Trim()) ? null : txtPolizaConsulta.Text.Trim();

            gvConsultaVehiculo.DataSource = new Vehiculo().Listar(new VehiculoInfo(sPlaca, sTarjetaPropiedad, sPoliza));
            gvConsultaVehiculo.DataBind();
        }



    }
}